<?php

namespace App\Containers\AppSection\LegalForm\Models;

use App\Containers\AppSection\Data\Models\Company;
use App\Containers\AppSection\Data\Models\Passport;
use App\Containers\AppSection\Data\Models\Personal;
use App\Containers\AppSection\File\Models\File;
use App\Containers\AppSection\Profile\Models\Profile;
use App\Containers\AppSection\Questionnaire\Models\Questionnaire;
use App\Containers\AppSection\User\Models\User;
use App\Ship\Parents\Models\Model;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasOne;
use Staudenmeir\EloquentJsonRelations\HasJsonRelationships;
use Staudenmeir\EloquentJsonRelations\Relations\BelongsToJson;

/**
 * Индивидуальный предприниматель
 *
 * @property int $id Id
 * @property int $user_id Владелец
 * @property int $personal_id Персональные данные
 * @property int $passport_id Паспортные данные
 * @property int $company_id Данные компании
 * @property Carbon $created_at Время создания
 * @property Carbon $updated_at Время обновления
 *
 * @property User $user Владелец
 * @property Personal $personal Персональные данные
 * @property Passport $passport Паспортные данные
 * @property Company $company Данные компании
 * @property Questionnaire $questionnaire Анкета
 * @property Profile $profile Профиль
 * @property File[] $documents Документы
 */
class LegalForm extends Model
{
    use HasJsonRelationships;

    protected $fillable = [
        'user_id',
        'personal_id',
        'passport_id',
        'company_id',
        'documents',
    ];
    protected $casts = [
        'documents' => 'json',
    ];

    protected $dates = [
        'created_at',
        'updated_at',
    ];

    protected $table = 'legal_form';

    /**
     * A resource key to be used in the serialized responses.
     */
    protected string $resourceKey = 'LegalForm';

    /**
     * Паспортные данные
     * @return BelongsTo Passport
     */
    public function passport(): BelongsTo
    {
        return $this->belongsTo(Passport::class, 'passport_id', 'id');
    }

    /**
     * Персональные данные
     * @return BelongsTo Personal
     */
    public function personal(): BelongsTo
    {
        return $this->belongsTo(Personal::class, 'personal_id', 'id');
    }

    /**
     * Анкета
     * @return hasOne Questionnaire
     */
    public function questionnaire(): hasOne
    {
        return $this->hasOne(Questionnaire::class, 'legal_form_id', 'id');
    }

    /**
     * Данные компании
     * @return BelongsTo Company
     */
    public function company(): BelongsTo
    {
        return $this->belongsTo(Company::class, 'company_id', 'id');
    }

    /**
     * Профиль
     * @return hasOne Profile
     */
    public function profile(): hasOne
    {
        return $this->hasOne(Profile::class, 'legal_form_id', 'id');
    }

    /**
     * Владелец
     * @return BelongsTo User
     */
    public function user(): BelongsTo
    {
        return $this->belongsTo(User::class, 'user_id', 'id')->withTrashed();
    }

    /**
     * Документы
     * @return BelongsToJson Files
     */
    public function documents(): belongsToJson
    {
        return $this->belongsToJson(File::class, 'documents');
    }
}
